<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  <title>图解Http二简单的HTTP协议 | 清风向阳</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  
    <meta name="keywords" content="Joker,Joker's Blog" />
  
  <meta name="description" content="针对HTTP协议结构进行讲解，主要使用HTTP/1.1版本">
<meta name="keywords" content="HTTP">
<meta property="og:type" content="article">
<meta property="og:title" content="图解Http二简单的HTTP协议">
<meta property="og:url" content="http://mjjde.github.io/2017/04/28/图解Http二简单的HTTP协议/index.html">
<meta property="og:site_name" content="清风向阳">
<meta property="og:description" content="针对HTTP协议结构进行讲解，主要使用HTTP/1.1版本">
<meta property="og:image" content="http://jokero1o.github.io/images/blog_http_2-1.png">
<meta property="og:updated_time" content="2017-09-15T06:59:45.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="图解Http二简单的HTTP协议">
<meta name="twitter:description" content="针对HTTP协议结构进行讲解，主要使用HTTP/1.1版本">
<meta name="twitter:image" content="http://jokero1o.github.io/images/blog_http_2-1.png">
  
  
    <link rel="icon" href="/favicon_pic.ico">
  
  <link href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">
  <link rel="stylesheet" href="/css/style.css">
  <script src="/js/pace.min.js"></script>
  

  
  

</head>

<body>
  <div id="container">
      <header id="header">
    <div id="banner"></div>
    <div id="header-outer">
        <div id="header-menu" class="header-menu-pos animated">
            <div class="header-menu-container">
                <a href="/" class="left">
                    <span class="site-title">Joker&#39;s Blog</span>
                </a>
                <nav id="header-menu-nav" class="right">
                    
                    <a  href="/">
                        <i class="fa fa-home"></i>
                        <span>Home</span>
                    </a>
                    
                    <a  href="/archives">
                        <i class="fa fa-archive"></i>
                        <span>Archives</span>
                    </a>
                    
                    <a  href="/about">
                        <i class="fa fa-user"></i>
                        <span>About</span>
                    </a>
                    
                </nav>
                <a class="mobile-header-menu-button">
                    <i class="fa fa-bars"></i>
                </a>
            </div>
        </div>
        <div id="header-row">
            <div id="logo">
                <a href="/">
                    <img src="/images/avatar.jpg" alt="logo">
                </a>
            </div>
            <div class="header-info">
                <div id="header-title">
                    
                    <h2>
                        Joker&#39;s Blog
                    </h2>
                    
                </div>
                <div id="header-description">
                    
                    <h3>
                        一个认真的技术博客
                    </h3>
                    
                </div>
            </div>
            <nav class="header-nav">
                <div class="social">
                    
                        <a title="Joker"  href="//joker-studio.pub">
                            <i class="fa fa-home fa-2x"></i></a>
                    
                        <a title="Github" target="_blank" href="//github.com/mjjde">
                            <i class="fa fa-github fa-2x"></i></a>
                    
                </div>
            </nav>
        </div>
    </div>
</header>
      <div class="outer">
        <section id="main" class="body-wrap"><article id="post-图解Http二简单的HTTP协议" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-inner">
    
      <header class="article-header">
        
  
    <h1 class="post-title" itemprop="name">
      图解Http二简单的HTTP协议
    </h1>
    <div class="post-title-bar">
      <ul>
          
              <li>
                  <i class="fa fa-book"></i>
                  
                      <a href="/categories/网络技术/">网络技术</a>
                  
              </li>
          
        <li>
          <i class="fa fa-calendar"></i>  2017-04-28
        </li>
        <li>
          <i class="fa fa-eye"></i>
          <span id="busuanzi_value_page_pv"></span>
        </li>
      </ul>
    </div>
  

          
      </header>
    
    <div class="article-entry post-content" itemprop="articleBody">
      
            
            <blockquote>
<p>针对HTTP协议结构进行讲解，主要使用HTTP/1.1版本<br><a id="more"></a></p>
</blockquote>
<h3 id="HTTP协议用于客户端和服务端之间的通信"><a href="#HTTP协议用于客户端和服务端之间的通信" class="headerlink" title="HTTP协议用于客户端和服务端之间的通信"></a><a href="#HTTP_u534F_u8BAE_u7528_u4E8E_u5BA2_u6237_u7AEF_u548C_u670D_u52A1_u7AEF_u4E4B_u95F4_u7684_u901A_u4FE1" title="HTTP协议用于客户端和服务端之间的通信"></a>HTTP协议用于客户端和服务端之间的通信</h3><p>两台计算机直接使用HTTP协议通信时，必定会有一端为客户端，一段为服务端。存在角色相互交换的情况，但是对于一次HTTP通信，必定会有一个是客户端，一个是服务端。</p>
<h3 id="通过请求和响应的交换达成通信"><a href="#通过请求和响应的交换达成通信" class="headerlink" title="通过请求和响应的交换达成通信"></a><a href="#u901A_u8FC7_u8BF7_u6C42_u548C_u54CD_u5E94_u7684_u4EA4_u6362_u8FBE_u6210_u901A_u4FE1" title="通过请求和响应的交换达成通信"></a>通过请求和响应的交换达成通信</h3><p>HTTP的通信必定是从客户端发起的，服务端在没有接收到请求时是不会发送通信的。<br>客户端请求报文的具体内容是</p>
<figure class="highlight gcode"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">第一行:请求方法<span class="comment">(get/post等等)</span> 请求URI<span class="comment">(/index.html)</span> 协议版本<span class="comment">(HTTP/1.1)</span></div><div class="line">第二行:可选首部字段<span class="comment">(Host/Connection)</span></div><div class="line">第三行:</div><div class="line">第四行:内容实体</div></pre></td></tr></table></figure>
<p>服务端响应报文的具体内容是</p>
<figure class="highlight makefile"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line"><span class="section">第一行:协议版本(HTTP/1.1) 状态码(200/404) 原因短语(OK)</span></div><div class="line"><span class="section">第二行:创建响应日期时间</span></div><div class="line"><span class="section">第三行:首部字段(Content-Type/Content-Length)</span></div><div class="line"><span class="section">第四行:</span></div><div class="line"><span class="section">第五行:实体内容</span></div></pre></td></tr></table></figure>
<h3 id="HTTP是不保存状态的协议"><a href="#HTTP是不保存状态的协议" class="headerlink" title="HTTP是不保存状态的协议"></a><a href="#HTTP_u662F_u4E0D_u4FDD_u5B58_u72B6_u6001_u7684_u534F_u8BAE" title="HTTP是不保存状态的协议"></a>HTTP是不保存状态的协议</h3><p>HTTP是具备保持状态的，不会对上次的请求进行持久化处理，HTTP请求是无状态的</p>
<h3 id="请求URI定位资源"><a href="#请求URI定位资源" class="headerlink" title="请求URI定位资源"></a><a href="#u8BF7_u6C42URI_u5B9A_u4F4D_u8D44_u6E90" title="请求URI定位资源"></a>请求URI定位资源</h3><p>HTTP使用URI定位在互联网上的资源，可以有多种方式来表示。</p>
<ol>
<li>URI为完整的请求URI</li>
<li>在首部字段Host写明网络域名或者IP地址</li>
</ol>
<h3 id="告知服务器意图的HTTP方法"><a href="#告知服务器意图的HTTP方法" class="headerlink" title="告知服务器意图的HTTP方法"></a><a href="#u544A_u77E5_u670D_u52A1_u5668_u610F_u56FE_u7684HTTP_u65B9_u6CD5" title="告知服务器意图的HTTP方法"></a>告知服务器意图的HTTP方法</h3><ol>
<li>GET请求<br>GET方法是用来访问获取已经被URI表示的资源。</li>
<li>POST请求<br>POST请求是用来服务端发送实体主体。并不是像GET请求一样获取服务端的资源</li>
<li>PUT请求<br>PUT请求主要是用来给服务端发送文件，请求的实体是文件的内容，将该文件保存到请求的URI指定的位置</li>
<li>HEAD请求<br>HEAD请求与GET类似，但是并不是去获取URI知道的资源，而是确认资源是否存在有效</li>
<li>DELETE请求<br>DELETE请求是用来删除URI指定的资源</li>
<li>OPTIONS请求<br>OPTIONS请求是用来获取URI指定资源支持的请求方法</li>
<li>TRACE请求<br>TRACE请求是用来追踪一个请求发送之后是如何处理的</li>
<li>CONNECT请求<br>CONNECT请求主要是在与代理服务器通信时建立隧道。实现用隧道协议进行TCP通信</li>
</ol>
<h3 id="使用方法下达命令"><a href="#使用方法下达命令" class="headerlink" title="使用方法下达命令"></a><a href="#u4F7F_u7528_u65B9_u6CD5_u4E0B_u8FBE_u547D_u4EE4" title="使用方法下达命令"></a>使用方法下达命令</h3><p>向请求URI指定的资源发送请求报文时，采用称为方法的命令。<br><img src="http://jokero1o.github.io/images/blog_http_2-1.png" alt=""></p>
<h3 id="持久连接节省通信量"><a href="#持久连接节省通信量" class="headerlink" title="持久连接节省通信量"></a><a href="#u6301_u4E45_u8FDE_u63A5_u8282_u7701_u901A_u4FE1_u91CF" title="持久连接节省通信量"></a>持久连接节省通信量</h3><p>HTTP协议在初始版本中是每请求一次都会创建一次连接，请求完成后就会断开。<br>这样在一定场景下不是很适合的。比如访问一个有大量图片的HTML页面，这样的话会有很多的连接断开无用动作，会耗费资源。</p>
<h4 id="持久连接"><a href="#持久连接" class="headerlink" title="持久连接"></a><a href="#u6301_u4E45_u8FDE_u63A5" title="持久连接"></a>持久连接</h4><p>为了解决上面的问题HTTP/1.1和部分1.0采用持久连。持久连接的通信在双方没有明确要断开是，保持连接。<br>持久连接的好处在于可以减少TCP连接的持续建立和断开造成的额外开销，减轻的服务端的压力也减少客户端的资源开销。</p>
<h4 id="管线化"><a href="#管线化" class="headerlink" title="管线化"></a><a href="#u7BA1_u7EBF_u5316" title="管线化"></a>管线化</h4><p>持久连接就为管线化创造了条件，管线话是可以在不需要等待上次请求返回会在发送请求，这样就可以并行的去处理请求。</p>
<h3 id="使用Cookie的状态管理"><a href="#使用Cookie的状态管理" class="headerlink" title="使用Cookie的状态管理"></a><a href="#u4F7F_u7528Cookie_u7684_u72B6_u6001_u7BA1_u7406" title="使用Cookie的状态管理"></a>使用Cookie的状态管理</h3><p>HTTP是无状态的，所以无法根据上次请求的状态而改变或控制本次的请求。比如上次请求是登录请求，那么这次的请求是要根据是否登录成功来决定这次的返回，于是就引入了Cookie技术<br>服务端在接收到一个没有请求后生成一个Cookie值放在首部set-Cookie字段中，客户端接到了服务端的返回，在下次的请求的首部加入cookie字段填入服务端传来的cookie值，这样就知道是那次请求了。</p>

            <div class="post-copyright">
    <div class="content">
        <p>最后更新： 2017年09月15日 14:59</p>
        <p>原始链接： <a class="post-url" href="/2017/04/28/图解Http二简单的HTTP协议/" title="图解Http二简单的HTTP协议">http://mjjde.github.io/2017/04/28/图解Http二简单的HTTP协议/</a></p>
        <footer>
            <a href="http://mjjde.github.io">
                <img src="/images/avatar.jpg" alt="Joker Mei">
                Joker Mei
            </a>
        </footer>
    </div>
</div>

      
    </div>
    <footer class="article-footer">
        
        
<div class="post-share">
    <a href="javascript:;" id="share-sub" class="post-share-fab">
        <i class="fa fa-share-alt"></i>
    </a>
    <div class="post-share-list" id="share-list">
        <ul class="share-icons">
          <li>
            <a class="weibo share-sns" target="_blank" href="http://service.weibo.com/share/share.php?url=http://mjjde.github.io/2017/04/28/图解Http二简单的HTTP协议/&title=《图解Http二简单的HTTP协议》 — 清风向阳&pic=http://mjjde.github.ioimages/avatar.jpg" data-title="微博">
              <i class="fa fa-weibo"></i>
            </a>
          </li>
          <li>
            <a class="weixin share-sns" id="wxFab" href="javascript:;" data-title="微信">
              <i class="fa fa-weixin"></i>
            </a>
          </li>
          <li>
            <a class="qq share-sns" target="_blank" href="http://connect.qq.com/widget/shareqq/index.html?url=http://mjjde.github.io/2017/04/28/图解Http二简单的HTTP协议/&title=《图解Http二简单的HTTP协议》 — 清风向阳&source=
针对HTTP协议结构进行讲解，主要使用HTTP/1.1版本" data-title="QQ">
              <i class="fa fa-qq"></i>
            </a>
          </li>
          <li>
            <a class="facebook share-sns" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=http://mjjde.github.io/2017/04/28/图解Http二简单的HTTP协议/" data-title="Facebook">
              <i class="fa fa-facebook"></i>
            </a>
          </li>
          <li>
            <a class="twitter share-sns" target="_blank" href="https://twitter.com/intent/tweet?text=《图解Http二简单的HTTP协议》 — 清风向阳&url=http://mjjde.github.io/2017/04/28/图解Http二简单的HTTP协议/&via=http://mjjde.github.io" data-title="Twitter">
              <i class="fa fa-twitter"></i>
            </a>
          </li>
          <li>
            <a class="google share-sns" target="_blank" href="https://plus.google.com/share?url=http://mjjde.github.io/2017/04/28/图解Http二简单的HTTP协议/" data-title="Google+">
              <i class="fa fa-google-plus"></i>
            </a>
          </li>
        </ul>
     </div>
</div>
<div class="post-modal wx-share" id="wxShare">
    <a class="close" href="javascript:;" id="wxShare-close">×</a>
    <p>扫一扫，分享到微信</p>
    <img src="//api.qrserver.com/v1/create-qr-code/?data=http://mjjde.github.io/2017/04/28/图解Http二简单的HTTP协议/" alt="微信分享二维码">
</div>

<div class="mask"></div>

        
        <ul class="article-footer-menu">
            
            
  <li class="article-footer-tags">
    <i class="fa fa-tags"></i>
      
    <a href="/tags/HTTP/" class="color5">HTTP</a>
      
  </li>

        </ul>
        
    </footer>
  </div>
</article>


    <aside class="post-toc-pos post-toc-top" id="post-toc">
        <nav class="post-toc-wrap">
            <ol class="post-toc"><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#HTTP协议用于客户端和服务端之间的通信"><span class="post-toc-text">HTTP协议用于客户端和服务端之间的通信</span></a></li><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#通过请求和响应的交换达成通信"><span class="post-toc-text">通过请求和响应的交换达成通信</span></a></li><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#HTTP是不保存状态的协议"><span class="post-toc-text">HTTP是不保存状态的协议</span></a></li><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#请求URI定位资源"><span class="post-toc-text">请求URI定位资源</span></a></li><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#告知服务器意图的HTTP方法"><span class="post-toc-text">告知服务器意图的HTTP方法</span></a></li><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#使用方法下达命令"><span class="post-toc-text">使用方法下达命令</span></a></li><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#持久连接节省通信量"><span class="post-toc-text">持久连接节省通信量</span></a><ol class="post-toc-child"><li class="post-toc-item post-toc-level-4"><a class="post-toc-link" href="#持久连接"><span class="post-toc-text">持久连接</span></a></li><li class="post-toc-item post-toc-level-4"><a class="post-toc-link" href="#管线化"><span class="post-toc-text">管线化</span></a></li></ol></li><li class="post-toc-item post-toc-level-3"><a class="post-toc-link" href="#使用Cookie的状态管理"><span class="post-toc-text">使用Cookie的状态管理</span></a></li></ol>
        </nav>
    </aside>
    

<nav id="article-nav">
  
    <a href="/2017/04/28/图解Http一了解Web及网络服务/" id="article-nav-newer" class="article-nav-link-wrap">

      <span class="article-nav-title">
        <i class="fa fa-hand-o-left" aria-hidden="true"></i>
        
          图解Http一了解Web及网络服务
        
      </span>
    </a>
  
  
    <a href="/2017/04/26/Android-Binder技术之ServiceManager获取/" id="article-nav-older" class="article-nav-link-wrap">
      <span class="article-nav-title">Android-Binder技术之ServiceManager获取</span>
      <i class="fa fa-hand-o-right" aria-hidden="true"></i>
    </a>
  
</nav>



    
</section>
        
      </div>
      <footer id="footer">
  <div class="outer">
    <div id="footer-info" class="inner">
      
<p>
    <span id="busuanzi_container_site_uv" style='display:none'>
        总访客数：<span id="busuanzi_value_site_uv"></span>
    </span>
    <span id="busuanzi_container_site_pv" style='display:none'>
        总访问量：<span id="busuanzi_value_site_pv"></span>
    </span>
</p>


      <p>
        Powered by  <a href="http://hexo.io/" target="_blank">Hexo</a>
        Theme <a href="//github.com/wongminho/hexo-theme-miho" target="_blank">MiHo</a>
      &copy; 2018 Joker Mei<br>
      </p>
    </div>
  </div>
</footer>
    <script async src="//dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<script src="//cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script>
  var mihoConfig = {
      root: "http://mjjde.github.io",
      animate: false,
      isHome: false,
      share: true
  }
</script>
<div class="sidebar">
    <!-- <div id="sidebar-search" title="Search">
        <i class="fa fa-search"></i>
    </div> -->
    <div id="sidebar-category" title="Categories">
        <i class="fa fa-book"></i>
    </div>
    <div id="sidebar-tag" title="Tags">
        <i class="fa fa-tags"></i>
    </div>
    <div id="sidebar-top">
        <span class="sidebar-top-icon"><i class="fa fa-angle-up"></i></span>
    </div>
</div>
<div class="sidebar-menu-box" id="sidebar-menu-box">
    <div class="sidebar-menu-box-container">
        <div id="sidebar-menu-box-categories">
            <a class="category-link" href="/categories/Android技术/">Android技术</a><a class="category-link" href="/categories/其他技术/">其他技术</a><a class="category-link" href="/categories/网络技术/">网络技术</a><a class="category-link" href="/categories/设计模式/">设计模式</a>
        </div>
        <div id="sidebar-menu-box-tags">
            <a href="/tags/Activity/" style="font-size: 10px;">Activity</a> <a href="/tags/Android/" style="font-size: 16px;">Android</a> <a href="/tags/Android-IPC/" style="font-size: 10px;">Android-IPC</a> <a href="/tags/Binder/" style="font-size: 16px;">Binder</a> <a href="/tags/DiskLruCache/" style="font-size: 10px;">DiskLruCache</a> <a href="/tags/Fragment/" style="font-size: 10px;">Fragment</a> <a href="/tags/HTTP/" style="font-size: 20px;">HTTP</a> <a href="/tags/Java/" style="font-size: 10px;">Java</a> <a href="/tags/Notification/" style="font-size: 10px;">Notification</a> <a href="/tags/RemoteView/" style="font-size: 10px;">RemoteView</a> <a href="/tags/Rxjava/" style="font-size: 14px;">Rxjava</a> <a href="/tags/ServiceManager/" style="font-size: 14px;">ServiceManager</a> <a href="/tags/android/" style="font-size: 12px;">android</a> <a href="/tags/gradle/" style="font-size: 10px;">gradle</a> <a href="/tags/java/" style="font-size: 18px;">java</a> <a href="/tags/other/" style="font-size: 10px;">other</a> <a href="/tags/volley/" style="font-size: 12px;">volley</a> <a href="/tags/widget/" style="font-size: 10px;">widget</a> <a href="/tags/事件/" style="font-size: 10px;">事件</a> <a href="/tags/组件化/" style="font-size: 10px;">组件化</a> <a href="/tags/设计模式/" style="font-size: 18px;">设计模式</a>
        </div>
    </div>
    <a href="javascript:;" class="sidebar-menu-box-close">&times;</a>
</div>
<div class="mobile-header-menu-nav" id="mobile-header-menu-nav">
    <div id="mobile-header-menu-container">
        <span class="title">Menu</span>
        <ul class="mobile-header-menu-navbar">
            
            <li>
                <a  href="/">
                    <i class="fa fa-home"></i><span>Home</span>
                </a>
            </li>
            
            <li>
                <a  href="/archives">
                    <i class="fa fa-archive"></i><span>Archives</span>
                </a>
            </li>
            
            <li>
                <a  href="/about">
                    <i class="fa fa-user"></i><span>About</span>
                </a>
            </li>
            
        </ul>
    </div>
</div>
<div class="search-wrap">
    <span class="search-close">&times;</span>
        <a href="javascript:;" class="header-icon waves-effect waves-circle waves-light" id="back">
            <i class="icon icon-lg icon-chevron-left"></i>
        </a>
        <input class="search-field" placeholder="Search..." id="keywords">
        <a id="search-submit" href="javascript:;">
            <i class="fa fa-search"></i>
        </a>
    <div class="search-container" id="search-container">
        <ul class="search-result" id="search-result">
        </ul>
    </div>
</div>

<div id="search-tpl">
    <li class="search-result-item">
        <a href="{url}" class="search-item-li">
            <span class="search-item-li-title" title="{title}">{title}</span>
        </a>
    </li>
</div>
<script src="/js/search.js"></script>
<script src="/js/main.js"></script>








  </div>
</body>
</html>